package 基础语法.反射;

import java.lang.reflect.Field;

public class 反射获取成员变量 {
    public static void main(String[] args) throws Exception {
        // 获取class子节吗文件的对象
        Class mClass = Class.forName("基础语法.反射.MyClass");// 可以不用加<String>,免得要强制转换

        // 获取全部公开的成员变量，方式和获取全部公开的构造方法类似
        Field[] fs = mClass.getFields();
        for (Field fsi : fs) {
            System.out.println(fsi);
        }

        System.out.println();
        // 获取全部的成员变量，方式和获取公开的构造方法类似
        Field[] fsa = mClass.getDeclaredFields();
        for (Field fsi : fsa) {
            System.out.println(fsi);
        }
        System.out.println();

        // 获取单个公开的成员变量，方式和获取单个公开的构造方法类似
        Field fc = mClass.getField("c");//变量名称
        System.out.println(fc);

        // 获取单个私有的成员变量，方式和获取单个私有的构造方法类似
        Field fap = mClass.getDeclaredField("a");//变量名称
        System.out.println(fap);

        System.out.println(fap.getModifiers());//权限修饰符
        System.out.println(fap.getName());//变量名称
        System.out.println(fap.getType());//获取类型

        MyClass myClass=new MyClass(1,2);
        fap.setAccessible(true);//设置private修饰的变量的访问权限，与访问私有构造方法类似
        
        Object a=fap.get(myClass);//获取对应对象的属性的值；对与private要先该权限
        System.out.println(a+"____");
        fap.set(myClass, 11111111);
        System.out.println(myClass);

        

        //fap.setI


    }

}
